package com.rc.evcharger.common.enums.zc;

/**
 * Create by Yang on 2021/4/29
 *
 * Bit0：正常
 * Bit1：急停按钮动作故障；
 * Bit2：无可用整流模块；
 * Bit3：出风口温度过高；
 *
 * Bit4：交流防雷故障；
 * Bit5：交直流模块 DC20 通信中
 * 断；
 * Bit6：绝缘检测模块 FC08 通信中
 * 断；
 * Bit7：电度表通信中断；
 * Bit8：读卡器通信中断；
 * Bit9：RC10 通信中断；
 * Bit10：风扇调速板故障；
 * Bit11：直流熔断器故障；
 * Bit12：高压接触器故障；
 * Bit13：门打开；
 *
 * 类别 代码 具体原因
 * 充电完成
 * 0x40 结束充电，APP 远程停止
 * 0x41 结束充电，SOC 达到 100%
 * 0x42 结束充电，充电电量满足设定条件
 * 0x43 结束充电，充电金额满足设定条件
 * 0x44 结束充电，充电时间满足设定条件
 * 0x45 结束充电，手动停止充电
 * 0x46~0x
 * 49
 * 其他方式（预留）
 * 充电启
 * 动失败
 * 0x4A 充电启动失败，充电桩控制系统故障(需要重启或自动恢
 * 复)
 * 0x4B 充电启动失败，控制导引断开
 * 0x4C 充电启动失败，断路器跳位
 * 0x4D 充电启动失败，电表通信中断
 * 0x4E 充电启动失败，余额不足
 * 0x4F 充电启动失败，充电模块故障
 * 0x50 充电启动失败，急停开入
 * 0x51 充电启动失败，防雷器异常
 * 0x52 充电启动失败，BMS 未就绪
 * 0x53 充电启动失败，温度异常
 * 0x54 充电启动失败，电池反接故障
 * 0x55 充电启动失败，电子锁异常
 * 0x56 充电启动失败，合闸失败
 * 0x57 充电启动失败，绝缘异常
 * 0x58 预留
 * 0x59 充电启动失败，接收 BMS 握手报文 BHM 超时
 * 0x5A 充电启动失败，接收 BMS 和车辆的辨识报文超时 BRM
 * 0x5B 充电启动失败，接收电池充电参数报文超时 BCP
 * 0x5C 充电启动失败，接收 BMS 完成充电准备报文超时 BRO
 * AA
 * 0x5D 充电启动失败，接收电池充电总状态报文超时 BCS
 * 0x5E 充电启动失败，接收电池充电要求报文超时 BCL
 * 0x5F 充电启动失败，接收电池状态信息报文超时 BSM
 * 0x60 充电启动失败，GB2015 电池在BHM 阶段有电压不允许充
 * 电
 * 0x61 充电启动失败，GB2015 辨识阶段在 BRO_AA 时候电池实际
 * 电压与 BCP 报文电池电压差距大于 5
 * 0x62 充电启动失败，B2015 充电机在预充电阶段从 BRO_AA
 * 变成 BRO_00 状态
 * 0x63 充电启动失败，接收主机配置报文超时
 * 0x64 充电启动失败，充电机未准备就绪,我们没有回 CRO
 * AA，对应老国标
 * 0x65~0x
 * 69
 * （其他原因）预留
 * 0x6A 充电异常中止，系统闭锁
 * 0x6B 充电异常中止，导引断开
 * 0x6C 充电异常中止，断路器跳位
 * 0x6D 充电异常中止，电表通信中断
 * 0x6E 充电异常中止，余额不足
 * 0x6F 充电异常中止，交流保护动作
 * 0x78 预留
 * 0x79 充电异常中止，总充电电压异常
 * 0x7A 充电异常中止，总充电电流异常
 * 0x7B 充电异常中止，单体充电电压异常
 * 0x7C 充电异常中止，电池组过温
 * 0x7D 充电异常中止，最高单体充电电压异常
 * 0x7E 充电异常中止，最高电池组过温
 * 0x7F 充电异常中止，BMV 单体充电电压异常
 * 0x80 充电异常中止，BMT 电池组过温
 * 0x81 充电异常中止，电池状态异常停止充电
 * 0x82 充电异常中止，车辆发报文禁止充电
 * 0x83 充电异常中止，充电桩断电
 * 0x84 充电异常中止，接收电池充电总状态报文超时
 * 0x85 充电异常中止，接收电池充电要求报文超时
 * 0x86 充电异常中止，接收电池状态信息报文超时
 * 0x87 充电异常中止，接收 BMS 中止充电报文超时
 * 0x88 充电异常中止，接收 BMS 充电统计报文超时
 * 0x89 充电异常中止，接收对侧 CCS 报文超时
 * 0x8A~0x8F （其他原因）预留
 * 未知原因停止 0x90 未知原因停止
 */
public enum ZcElecPileStopReasonEnum {

    //todo  硬件故障
    ZC_PILE_STOP_0x00(0x00, "正常"),
    ZC_PILE_STOP_0x01(0x01, "急停"),
    ZC_PILE_STOP_0x02(0x02, "无可用整流模块"),
    ZC_PILE_STOP_0x03(0x03, "出风口温度过高"),
    ZC_PILE_STOP_0x04(0x04, "交流防雷故障"),
    ZC_PILE_STOP_0x05(0x05, "交直流模块 DC20 通信中断"),
    ZC_PILE_STOP_0x06(0x06, "绝缘检测模块 FC08 通信中断"),
    ZC_PILE_STOP_0x07(0x07, "电度表通信中断"),
    ZC_PILE_STOP_0x08(0x08, "读卡器通信中断"),
    ZC_PILE_STOP_0x09(0x09, "RC10 通信中断"),
    ZC_PILE_STOP_0x0A(0x0A, "风扇调速板故障"),
    ZC_PILE_STOP_0x0B(0x0B, "直流熔断器故障"),
    ZC_PILE_STOP_0x0C(0x0C, "高压接触器故障"),
    ZC_PILE_STOP_0x0D(0x0D, "门打开"),


    //todo 充电完成
    ZC_PILE_STOP_0x40(0x40, "结束充电，APP 远程停止"),
    ZC_PILE_STOP_0x41(0x41, "结束充电，SOC 达到 100% "),
    ZC_PILE_STOP_0x42(0x42, "结束充电，充电电量满足设定条件"),
    ZC_PILE_STOP_0x43(0x43, "结束充电，充电金额满足设定条件"),
    ZC_PILE_STOP_0x44(0x44, "结束充电，充电时间满足设定条件"),
    ZC_PILE_STOP_0x45(0x45, "结束充电，手动停止充电"),
    ZC_PILE_STOP_0x46(0x18, "其他方式（预留）"),

    //todo 充电启动失败
    ZC_PILE_STOP_0x4A(0x4A, "充电启动失败，充电桩控制系统故障(需要重启或自动恢复)"),
    ZC_PILE_STOP_0x4B(0x4B, "充电启动失败，控制导引断开"),
    ZC_PILE_STOP_0x4C(0x4C, "充电启动失败，断路器跳位"),
    ZC_PILE_STOP_0x4D(0x4D, "充电启动失败，电表通信中断"),
    ZC_PILE_STOP_0x4E(0x4E, "充电启动失败，余额不足"),
    ZC_PILE_STOP_0x4F(0x4F, "充电启动失败，充电模块故障"),
    ZC_PILE_STOP_0x50(0x50, "充电启动失败，急停开入"),
    ZC_PILE_STOP_0x51(0x51, "充电启动失败，防雷器异常"),
    ZC_PILE_STOP_0x52(0x52, "充电启动失败，BMS 未就绪"),
    ZC_PILE_STOP_0x53(0x53, "充电启动失败，温度异常"),
    ZC_PILE_STOP_0x54(0x54, "充电启动失败，电池反接故障"),
    ZC_PILE_STOP_0x55(0x55, "充电启动失败，电子锁异常"),
    ZC_PILE_STOP_0x56(0x56, "充电启动失败，合闸失败"),
    ZC_PILE_STOP_0x57(0x57, "充电启动失败，绝缘异常"),
    ZC_PILE_STOP_0x58(0x58, "预留"),
    ZC_PILE_STOP_0x59(0x59, "充电启动失败，接收 BMS 握手报文 BHM 超时"),
    ZC_PILE_STOP_0x5A(0x5A, "充电启动失败，接收 BMS 和车辆的辨识报文超时 BRM"),
    ZC_PILE_STOP_0x5B(0x5B, "充电启动失败，接收电池充电参数报文超时 BCP"),
    ZC_PILE_STOP_0x5C(0x5C, "充电启动失败，接收 BMS 完成充电准备报文超时 BROAA"),
    ZC_PILE_STOP_0x5D(0x5D, "充电启动失败，接收电池充电总状态报文超时 BCS"),
    ZC_PILE_STOP_0x5E(0x5E, "充电启动失败，接收电池充电要求报文超时 BCL"),
    ZC_PILE_STOP_0x5F(0x5F, "充电启动失败，接收电池状态信息报文超时 BSM"),
    ZC_PILE_STOP_0x60(0x60, "充电启动失败，接收电池充电要求报文超时 BCL"),
    ZC_PILE_STOP_0x61(0x61, "充电启动失败，GB2015 辨识阶段在 BRO_AA 时候电池实际电压与 BCP 报文电池电压差距大于 "),
    ZC_PILE_STOP_0x62(0x62, "充电启动失败，B2015 充电机在预充电阶段从 BRO_AA变成 BRO_00 状态"),
    ZC_PILE_STOP_0x63(0x63, "充电启动失败，接收主机配置报文超时"),
    ZC_PILE_STOP_0x64(0x64, "充电启动失败，充电机未准备就绪,我们没有回 CROAA，对应老国标"),
    ZC_PILE_STOP_0x65(0x65, "（其他原因）预留"),

    //todo 充电中止
    ZC_PILE_STOP_0x6A(0x6A, "充电异常中止，系统闭锁"),
    ZC_PILE_STOP_0x6B(0x6B, "充电异常中止，导引断开"),
    ZC_PILE_STOP_0x6C(0x6C, "充电异常中止，断路器跳位"),
    ZC_PILE_STOP_0x6D(0x6D, "充电异常中止，电表通信中断"),
    ZC_PILE_STOP_0x6E(0x6E, "充电异常中止，余额不足"),
    ZC_PILE_STOP_0x6F(0x6F, "充电异常中止，交流保护动作"),

    ZC_PILE_STOP_0x78(0x78, "预留"),
    ZC_PILE_STOP_0x79(0x79, "充电异常中止，总充电电压异常"),
    ZC_PILE_STOP_0x7A(0x7A, "充电异常中止，总充电电流异常"),
    ZC_PILE_STOP_0x7B(0x7B, "充电异常中止，单体充电电压异常"),
    ZC_PILE_STOP_0x7C(0x7C, "充电异常中止，电池组过温"),
    ZC_PILE_STOP_0x7D(0x7D, "充电异常中止，最高单体充电电压异常"),
    ZC_PILE_STOP_0x7E(0x7E, "充电异常中止，最高电池组过温"),
    ZC_PILE_STOP_0x7F(0x7F, "充电异常中止，BMV 单体充电电压异常"),

    ZC_PILE_STOP_0x80(0x80, "充电异常中止，BMT 电池组过温"),
    ZC_PILE_STOP_0x81(0x81, "充电异常中止，电池状态异常停止充电"),
    ZC_PILE_STOP_0x82(0x82, "充电异常中止，车辆发报文禁止充电"),
    ZC_PILE_STOP_0x83(0x83, "充电异常中止，充电桩断电"),
    ZC_PILE_STOP_0x84(0x84, "充电异常中止，接收电池充电总状态报文超时"),
    ZC_PILE_STOP_0x85(0x85, "充电异常中止，接收电池充电要求报文超时"),
    ZC_PILE_STOP_0x86(0x86, "充电异常中止，接收电池状态信息报文超时"),
    ZC_PILE_STOP_0x87(0x87, "充电异常中止，接收 BMS 中止充电报文超时"),
    ZC_PILE_STOP_0x88(0x88, "充电异常中止，接收 BMS 充电统计报文超时"),
    ZC_PILE_STOP_0x89(0x89, "充电异常中止，接收对侧 CCS 报文超时"),
    ZC_PILE_STOP_0x8A(0x8A, "（其他原因）预留"),

    ZC_PILE_STOP_0x90(0x90, "充电异常中止，交流保护动作");



    private Integer code;
    private String msg;

    ZcElecPileStopReasonEnum(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }


    /**
     * 解析code
     *
     * @param code
     * @return
     */
    public static String getElecPileStopReasonResult(String code) {
        Integer intCode = Integer.parseInt(code, 16);
        Class<ZcElecPileStopReasonEnum> enumClass = ZcElecPileStopReasonEnum.class;
        for (ZcElecPileStopReasonEnum zcElecPileStopReasonEnum : enumClass.getEnumConstants()) {
            if (intCode == zcElecPileStopReasonEnum.getCode()) {
                return zcElecPileStopReasonEnum.getMsg();
            }
        }
        return "该停止方式未知:" + intCode;

    }


    /**
     * 解析code
     *
     * @param code
     * @return
     */
    public static String getElecPileStopReasonResultWithInt(String code) {
        //Integer intCode = Integer.parseInt(code, 16);
        Class<ZcElecPileStopReasonEnum> enumClass = ZcElecPileStopReasonEnum.class;
        for (ZcElecPileStopReasonEnum zcElecPileStopReasonEnum : enumClass.getEnumConstants()) {
            if (code.equals(zcElecPileStopReasonEnum.getCode())) {
                return zcElecPileStopReasonEnum.getMsg();
            }
        }
        return "该停止方式未知:" + code;

    }
}
